1 Introducción

Insertar intro de lo que se va a hacer.

1.1 Ambiente de R

Para el análisis de los datos se utilizaron las librerías que se muestran a continuación:

  • plotly -> animación de gráficas.
  • tidyverse -> carga de archivos csv, creación de gráficas y manipulación de tablas.
  • lubridate -> manejo de fechas.
  • openxlsx -> carga de archivos de excel.
  • kableExtra -> diseño de tablas.
  • sf -> leer archivos shp.
  • moments -> asimetría y curtosis.
library(plotly)
library(tidyverse)
library(lubridate)
library(openxlsx)
library(kableExtra)
library(sf)
library(moments)
library(gganimate)
library(wordcloud2)

1.2 Conjunto de datos

Los conjuntos de datos utilizados en el presente análisis se pueden descargar en Víctimas en carpetas de investigación y Diccionario de víctimas dentro del Portal de Datos Abiertos de la CDMX. Para mayor información del conjunto de datos se puede consultar en Víctimas en carpetas de investigación FGJ.

La base contiene la información de las víctimas de diversos delitos que cuentan con una carpeta de investigación en la Fiscalía General de Justicia (FGJ) de la Ciudad de México a partir de enero del año 2019.

1.2.1 Descarga

data_url <- "https://archivo.datos.cdmx.gob.mx/fiscalia-general-de-justicia/victimas-en-carpetas-de-investigacion-fgj/victimas_completa_julio_2021.csv"

victimas <- read_csv(data_url, show_col_types = FALSE)

dicc_url <- "https://datos.cdmx.gob.mx/dataset/7593b324-6010-44f7-8132-cb8b2276c842/resource/10235569-f4a9-4876-9465-9780887df8e2/download/diccionario-de-victimas-actualizado.xlsx"

diccionario <- read.xlsx(dicc_url, sheet =1)

1.2.2 Formato de columnas

victimas$Mes_inicio <- as.factor(victimas$Mes_inicio)
victimas$FechaInicio <- dmy(victimas$FechaInicio)
victimas$Delito <- as.factor(victimas$Delito)
victimas$Categoria <- as.factor(victimas$Categoria)
victimas$Sexo <- as.factor(victimas$Sexo)
victimas$TipoPersona <- as.factor(victimas$TipoPersona)
victimas$CalidadJuridica <- as.factor(victimas$CalidadJuridica)
victimas$competencia <- as.factor(victimas$competencia)
victimas$Mes_hecho <- as.factor(victimas$Mes_hecho)
victimas$FechaHecho <- dmy(victimas$FechaHecho)
victimas$AlcaldiaHechos <- as.factor(victimas$AlcaldiaHechos)

1.2.3 Descripción de las variables

diccionario[,1:2] %>%
  kable()
Nombre.de.variable Definición
idCarpeta Número entero que representa el identificador único usado por PGJ asociado a cada carpeta de investigación dentro de su sistema.
Delito Es la conducta, acción u omisión típica (descrita por la ley), antijurídica (contraria a la ley) y culpable, a la que le corresponde una sanción.
Categoria Las carpetas de investigación se clasifican en función del tipo de delito cometido, los cuales se dividen en 16 tipos.
FechaHecho Día y hora en que se cometió el delito, según el reporte de la víctima.
HoraHecho Hora y minuto en que se cometió el delito, según el reporte de la víctima.
FechaInicio Día y hora en que se hizo la denuncia para iniciar la carpeta de investigación.
HoraInicio Hora y minuto en que se hizo la denuncia para iniciar la carpeta de investigación.
Año_hecho Año en que se cometió el delito, según el reporte de la víctima.
Mes_hecho Mes en que se cometió el delito, según el reporte de la víctima.
Año_inicio Año en que se hizo la denuncia para inciar la carpeta de investigación.
Mes_inicio Mes en que se hizo la denuncia para inciar la carpeta de investigación.
Sexo Sexo de la víctima del delito reportado.
Edad Edad de la víctima del delito reportado en la carpeta de investigación.
TipoPersona Cómo se reconoce a el o los denunciantes al ser sujetos de obligaciones y derechos salvaguardados legislación penal vigente.
CalidadJuridica Título con el que se registra y se identifica a la persona, física o moral, en la carpeta de investigación.
Competencia Variable categórica a través de la cuál se clasifican los hechos según su naturaleza. Hechos no delictivos corresponde a aquellos que son denunciados a la PGJ pero no constituyen un delito en sí mismos como por ejemplo un suicidio. Incompetencias son aquellos hechos delictivos que suceden fuera de la Ciudad de México y son denunciados a la PGJ de la Ciudad de México, por lo que no se deben tomar en cuenta como incidencia delictiva propia de la ciudad. Fuero común son los delitos que ocurren y se denuncian dentro de la Ciudad de México.
lon Longitud de la geolocalización, uno de dos elemento que componen la referencia angular que permite localizar el lugar donde se cometió el delito. WGS84
lat Latitud de la geolocalización, uno de dos elemento que componen la referencia angular que permite localizar el lugar donde se cometió el delito. WGS84
AlcaldiaHechos Alcaldía en que se cometió el delito, según el reporte de la víctima. Notar que puede ser fuera de la CDMX.
ColoniaHechos Colonia en que se cometió el delito, según el reporte de la víctima. Notar que puede ser fuera de la CDMX.
Calle_hechos Calle en que se cometió el delito, según el reporte de la víctima.
Calle_hechos2 Calle secundaria en que se cometió el delito, según el reporte de la víctima.

2 Análisis exploratorio

2.1 Estadísticos

victimas %>%
  select(Año_inicio, Sexo, Edad) %>%
  rename('Año inicio'=Año_inicio) %>%
  filter(!is.na(Edad), !is.na(Sexo), Edad>0, Edad<150) %>%
  group_by(`Año inicio`, Sexo) %>%
  summarise(Media = round(mean(Edad),2),
            SD = round(sd(Edad),2),
            Mediana = median(Edad),
            Asimetría = round(skewness(Edad),2),
            Curtosis = round(kurtosis(Edad),2),
            IQR = IQR(Edad),
            Mínimo = min(Edad),
            Máximo = max(Edad)) %>%
  kable()
Año inicio Sexo Media SD Mediana Asimetría Curtosis IQR Mínimo Máximo
2019 Femenino 38.30 16.39 36 0.42 2.95 22 1 100
2019 Masculino 39.87 15.55 38 0.41 2.91 22 1 111
2020 Femenino 37.93 16.37 36 0.42 2.94 22 1 103
2020 Masculino 39.80 15.88 38 0.37 2.95 22 1 114
2021 Femenino 37.77 16.41 36 0.46 3.02 22 1 120
2021 Masculino 40.02 16.10 38 0.35 2.93 22 1 103

2.2 Gráficas

2.2.1 Mapa

if (!dir.exists("datos_mapa")) {
  map_url <- "https://github.com/prestevez/covid-19-mx-map/raw/master/datos_covid/01_32_mun.zip"
  download.file(map_url, destfile = "datos_mapa.zip")
  unzip("datos_mapa.zip", exdir = "datos_mapa")
  file.remove("datos_mapa.zip")
}

mex_map <- 
  st_read("datos_mapa/01_32_mun.shp", quiet = TRUE) %>% 
  st_set_crs("+proj=lcc +lat_1=17.5 +lat_2=29.5 +lat_0=12 +lon_0=-102 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs") %>%
  filter(CVE_ENT == "09") %>%
  rename(Alcaldia = NOMGEO)


mex_map$Alcaldia <- chartr("ÁÉÍÓÚ", "AEIOU", 
                         toupper(mex_map$Alcaldia))

map_filt <- 
  victimas %>% 
  select(AlcaldiaHechos) %>%
  group_by(AlcaldiaHechos) %>%
  tally(name = "Delitos") %>%
  na.omit()

map_filt$AlcaldiaHechos <- 
  str_replace(map_filt$AlcaldiaHechos,
              "GUSTAVO A MADERO", "GUSTAVO A. MADERO")


mex_map_del <- 
  left_join(mex_map, map_filt, 
            by = c("Alcaldia" = "AlcaldiaHechos"))

map <- 
  ggplot() +
  geom_sf(data = mex_map_del, 
          aes(fill = Delitos, shape = Alcaldia),
          colour = "grey75", size = 0.1) +
  labs(title = "Cantidad de delitos por alcaldía") +
  theme_bw() + 
  scale_fill_gradient("Total de delitos", 
                      high = "red", low = "yellow") +
  theme(legend.position = "none")

ggplotly(map, tooltip = c("Delitos","Alcaldia"))

2.2.2 Boxplot

victimas %>%
  filter(Edad<150) %>%
  ggplot() + 
  geom_boxplot(aes(x = factor(Año_inicio),y = Edad, 
                   color = factor(Año_inicio)))

2.2.3 Histograma

victimas %>%
  filter(!is.na(Sexo), !is.na(CalidadJuridica)) %>%
  ggplot() +
  geom_histogram(aes(CalidadJuridica, fill = Sexo), 
                 stat = "count") +
  facet_grid(Año_inicio~.) +
  coord_flip()

2.2.4 Gráfica de barras

bar <-
  victimas %>%
  mutate(inicio_vs_hecho = difftime(FechaInicio, FechaHecho,
                                   units = "days")) %>%
  group_by(Categoria) %>%
  summarise(inicio_vs_hecho = mean(inicio_vs_hecho, 
                                   na.rm = TRUE)) %>%
  arrange(Categoria) %>%
  ggplot() +
  geom_bar(aes(x=Categoria, y=inicio_vs_hecho, fill = Categoria),
           stat = "identity") +
  coord_flip() +
  theme(legend.position = "none")+
  scale_x_discrete(labels=
                     substr(unique(sort(victimas$Categoria)),0,20))
ggplotly(bar)

2.2.5 Scatter

scat <-
  victimas %>%
  mutate(inicio_vs_hecho = difftime(FechaInicio, FechaHecho,
                                   units = "days")) %>%
  filter(Edad<150, Edad>0, Categoria == "VIOLACIÓN",
         !is.na(Sexo)) %>%
  ggplot() +
  geom_point(aes(x=Edad, y=inicio_vs_hecho, color = Sexo)) +
  labs(subtitle = 'Fecha: {frame_time}') +
  ylim(0,5000) + 
  transition_time(FechaInicio) +
  ease_aes('linear')
animate(scat, duration = 40)

2.2.6 Heatmap

heat <- 
  victimas %>%
  select(Mes_hecho, Categoria) %>%
  filter(!is.na(Mes_hecho), Categoria != "DELITO DE BAJO IMPACTO") %>%
  group_by(Mes_hecho, Categoria) %>%
  tally() %>%
  arrange(Categoria) %>% 
  ggplot(aes(x=factor(Mes_hecho, 
                      levels = c("Enero","Febrero","Marzo",
                                 "Abril","Mayo","Junio",
                                 "Julio","Agosto","Septiembre",
                                 "Octubre","Noviembre",
                                 "Diciembre")), 
             y=Categoria, fill=n)) +
  geom_tile() +
  theme(legend.position = "none") +
  scale_y_discrete(labels=
                     substr(unique(sort(victimas$Categoria)),0,20)) + 
  scale_fill_gradient(low = "yellow", high = "red")
ggplotly(heat)

2.2.7 Densidad

dens <- 
  victimas %>%
  select(Edad) %>%
  filter(Edad < 150, Edad>0) %>%
  ggplot(aes(x=Edad)) +
  geom_density(fill="#69b3a2", color="darkgreen", alpha=0.8, size=1)
ggplotly(dens)

2.2.8 Pie

pie1 <- 
  victimas %>%
  select(CalidadJuridica) %>%
  group_by(CalidadJuridica) %>%
  tally() %>%
  na.omit() %>%
  plot_ly(labels = ~CalidadJuridica, values = ~n, type = 'pie')

pie1
pie2 <- 
  victimas %>%
  select(competencia) %>%
  group_by(competencia) %>%
  tally() %>%
  na.omit() %>%
  plot_ly(labels = ~competencia, values = ~n, type = 'pie')

pie2
pie3 <- 
  victimas %>%
  select(TipoPersona) %>%
  group_by(TipoPersona) %>%
  tally() %>%
  na.omit() %>%
  plot_ly(labels = ~TipoPersona, values = ~n, type = 'pie')

pie3
pie4 <- 
  victimas %>%
  select(Sexo) %>%
  group_by(Sexo) %>%
  tally() %>%
  na.omit() %>%
  plot_ly(labels = ~Sexo, values = ~n, type = 'pie')

pie4

2.2.9 Wordcloud

victimas %>%
  select(Delito) %>%
  group_by(Delito) %>%
  tally() %>%
  na.omit() %>%
  wordcloud2(size=3, color='random-dark',
             backgroundColor="white", shape = "circle")

2.2.10 Lollipop

loli <- 
  data.frame(dia = as.character(wday(victimas$FechaHecho, 
                               label = TRUE, abbr = FALSE))) %>%
  group_by(dia) %>%
  tally() %>%
  na.omit() %>%
  ggplot(aes(x=dia, y=n)) +
  geom_segment(aes(xend=dia, yend=0)) +
  geom_point(size=4, color= "#189c54") +
  theme_bw()
ggplotly(loli)

3 Referencias